package admin.data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheManager;

import models.StoreItemModel;

import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyOpts;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;

@SuppressWarnings("unused")
public class StoreItemData {

	private Objectify ofy;

	private Cache cache = null;

	private String prefix = "StoreItem_";

	public StoreItemData() {
		try {
			ObjectifyService.register(StoreItemModel.class);
		} catch (Exception e) {
			// TODO: handle exception
		}

		try {
			cache = CacheManager.getInstance().getCacheFactory()
					.createCache(Collections.emptyMap());
		} catch (CacheException e) {
			// e.printStackTrace();
		}

		ObjectifyOpts opts = new ObjectifyOpts().setSessionCache(false);
		ofy = ObjectifyService.begin(opts);
	}

	public void insert(StoreItemModel storeItem) {
		ofy.put(storeItem);
	}

	public void insert(StoreItemModel storeItem, Objectify objfy) {
		objfy.put(storeItem);
	}

	public List<StoreItemModel> getListItem() {
		List<StoreItemModel> list = new ArrayList<StoreItemModel>();
		Query<StoreItemModel> query = ofy.query(StoreItemModel.class);
		for (StoreItemModel storeItem : query) {
			storeItem.setOrder(ProductData.getById(storeItem.getProductId())
					.getTotalOrderQuantity());
			list.add(storeItem);
		}
		return list;
	}

	public List<StoreItemModel> getListItemByType(int type) {
		List<StoreItemModel> list = new ArrayList<StoreItemModel>();
		Query<StoreItemModel> query = ofy.query(StoreItemModel.class).filter(
				"type", type);
		for (StoreItemModel storeItem : query) {
			storeItem.setOrder(ProductData.getById(storeItem.getProductId())
					.getTotalOrderQuantity());
			list.add(storeItem);
		}
		return list;
	}

	public StoreItemModel getItem(String id) {
		StoreItemModel item = new StoreItemModel();
		try {
			item = ofy.get(new Key<StoreItemModel>(StoreItemModel.class, id));
		} catch (Exception e) {
		}
		return item;
	}

	public StoreItemModel getItemByDealId(String dealId, Objectify objfy) {
		StoreItemModel item = null;
		try {
			Key<StoreItemModel> key = ofy.query(StoreItemModel.class)
					.filter("dealId", dealId).limit(1).getKey();

			try {
				item = ofy.get(key);
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return item;
	}

	public StoreItemModel getItemByDealId(String dealId) {
		StoreItemModel item = new StoreItemModel();
		try {
			Query<StoreItemModel> q = ofy.query(StoreItemModel.class)
					.filter("dealId", dealId).limit(1);
			for (StoreItemModel storeItem : q) {
				item = storeItem;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return item;
	}
}
